home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer)…68k, x86, SPARC, PA-RISC] / NeXTSTEP 3.3 Dev Intel.iso / NextDeveloper / Headers / architecture / i386 / byte_order.h < prev    next >
Text File  |  1993-03-12  |  2KB  |  136 lines

  1. /*
  2.  * Copyright (c) 1992 NeXT Computer, Inc.
  3.  *
  4.  * Byte ordering conversion (for i386).
  5.  *
  6.  * HISTORY
  7.  *
  8.  * 8 October 1992 David E. Bohman at NeXT
  9.  *    Converted to NXxxx versions.  Condensed history.
  10.  *
  11.  * 18 May 1992 David E. Bohman at NeXT
  12.  *    Created.
  13.  */
  14.  
  15. static __inline__
  16. unsigned short
  17. NXSwapShort(
  18.     unsigned short    inv
  19. )
  20. {
  21.     unsigned short    outv;
  22.     
  23.     __asm__ volatile(
  24.         "rorw $8,%0"
  25.     
  26.     : "=r"    (outv)
  27.     : "0"    (inv));
  28.     
  29.     return (outv);
  30. }
  31.  
  32. static __inline__
  33. unsigned int
  34. NXSwapInt(
  35.     unsigned int    inv
  36. )
  37. {
  38.     unsigned int    outv;
  39.     
  40.     __asm__ volatile(
  41.         "bswap %0"
  42.     
  43.     : "=r"    (outv)
  44.     : "0"    (inv));
  45.     
  46.     return (outv);
  47. }
  48.  
  49. static __inline__
  50. unsigned long
  51. NXSwapLong(
  52.     unsigned long    inv
  53. )
  54. {
  55.     unsigned long    outv;
  56.     
  57.     __asm__ volatile(
  58.         "bswap %0"
  59.     
  60.     : "=r"    (outv)
  61.     : "0"    (inv));
  62.     
  63.     return (outv);
  64. }
  65.  
  66. static __inline__
  67. unsigned long long
  68. NXSwapLongLong(
  69.     unsigned long long    inv
  70. )
  71. {
  72.     union llconv {
  73.     unsigned long long    ull;
  74.     unsigned long        ul[2];
  75.     } *inp, outv;
  76.     
  77.     inp = (union llconv *)&inv;
  78.     
  79.     outv.ul[0] = NXSwapLong(inp->ul[1]);
  80.     outv.ul[1] = NXSwapLong(inp->ul[0]);
  81.         
  82.     return (outv.ull);
  83. }
  84.  
  85. static __inline__ NXSwappedFloat
  86. NXConvertHostFloatToSwapped(float x)
  87. {
  88.     union fconv {
  89.     float number;
  90.     NXSwappedFloat sf;
  91.     };
  92.     return ((union fconv *)&x)->sf;
  93. }
  94.  
  95. static __inline__ float
  96. NXConvertSwappedFloatToHost(NXSwappedFloat x)
  97. {
  98.     union fconv {
  99.     float number;
  100.     NXSwappedFloat sf;
  101.     };
  102.     return ((union fconv *)&x)->number;
  103. }
  104.  
  105. static __inline__ NXSwappedDouble
  106. NXConvertHostDoubleToSwapped(double x)
  107. {
  108.     union dconv {
  109.     double number;
  110.     NXSwappedDouble sd;
  111.     };
  112.     return ((union dconv *)&x)->sd;
  113. }
  114.  
  115. static __inline__ double
  116. NXConvertSwappedDoubleToHost(NXSwappedDouble x)
  117. {
  118.     union dconv {
  119.     double number;
  120.     NXSwappedDouble sd;
  121.     };
  122.     return ((union dconv *)&x)->number;
  123. }
  124.  
  125. static __inline__ NXSwappedFloat
  126. NXSwapFloat(NXSwappedFloat x)
  127. {
  128.     return NXSwapLong(x);
  129. }
  130.  
  131. static __inline__ NXSwappedDouble
  132. NXSwapDouble(NXSwappedDouble x)
  133. {
  134.     return NXSwapLongLong(x);
  135. }
  136.